Skip to main content

Agent 上下文工程

一个跑了四十轮的 Agent,上下文从 3K 涨到 180K。窗口还没满,但它开始重复调已经调过的工具、忘记第五轮定下的约束、对着一份自己十轮前读过的文件再读一遍。

这不是模型退化,是上下文里能用的东西被不能用的东西挤掉了。上下文工程要解决的就是这件事:在每一轮里决定往那个有限的窗口里放什么、不放什么、放在哪个位置。

先约定几个词,本专题全程使用:

意思
上下文工程在推理时策划并维护那组进入模型的 token。区别于提示工程 —— 后者只管怎么把一次指令写好,前者管的是每一轮该带什么进来
注意力预算一个类比:模型对上下文的有效利用能力是有限的,越长越摊薄。它不是硬上限,而是一条持续下滑的曲线
上下文腐烂(context rot)输入变长导致模型表现变差的现象,即使任务本身没变难。02 篇给实测形态
压缩(compaction)把旧内容总结成一段摘要,替换掉原文。有损,但保留语义
裁剪(context editing)直接删掉特定内容(比如老的工具结果),不做总结。更省,但删掉就是删掉了
卸载(offload)把内容挪到上下文之外(文件、子 Agent、外部存储),需要时再取回一小部分
前缀缓存模型服务对请求前缀的缓存。前缀有一个字节变化,后面全部要重算
延迟加载(defer_loading)工具定义先不进上下文,等模型搜索到再加载。05 篇的主要手段

一、三组问题

三组的顺序不能调:不知道预算花在哪,任何压缩策略都是在瞎砍一、先认识01 · 窗口里装了什么五个 token 去向有效利用率怎么算02 · 为什么越长越差18 个模型的实测形态反直觉的三个结论二、三种手段,别混用03 · 砍掉:压缩与裁剪总结还是直接删,触发阈值怎么定04 · 挪走:卸载到外部文件、子 Agent、即时检索05 · 源头:工具与检索结果别让它进来,比进来再砍便宜三、工程约束06 · 前缀缓存上面每一招都可能把缓存打掉07 · 观测与落地怎么知道它起作用了四步顺序第三组是横切的:03、04、05 里的每一个动作都会改变请求前缀,而缓存命中率的变化通常比 token 省下来的那点更影响账单。
最常见的做法错误是跳过第一组直接上压缩。上下文里占比最大的那一块往往不是对话历史,而是工具定义或某一次没截断的检索结果 —— 压缩对话历史对它们完全无效。

二、七篇正文

#标题覆盖内容
01窗口里装了什么五个 token 去向与各自的增长曲线、预算怎么分配、有效利用率这个指标怎么算、上下文工程与提示工程的分界
02上下文腐烂18 个模型的实测形态、三个反直觉结论(打乱语料反而更好等)、位置效应、注意力预算的机制解释
03压缩与裁剪服务端压缩与上下文裁剪的分工、全部配置项与默认值、两个静默失效(摘要块丢失、工具打断摘要)、成本口径陷阱
04卸载到外部结构化笔记、子 Agent 隔离上下文、即时检索三条路线的取舍,以及各自把什么问题推到了哪里
05工具与检索结果的占用工具定义膨胀的实测量级、延迟加载与工具搜索、30 到 50 个工具的选择准确率拐点、检索结果分页
06前缀缓存与排布渲染顺序与断点放置、六类静默失效的审计清单、裁剪与压缩各自怎么影响缓存、怎么验证
07观测与落地该看哪五个指标、怎么给上下文构成打点、常见反模式清单、四步落地顺序
按你手上的症状挑 —— 七篇不必按顺序读不知道上下文到底花在哪儿了先把五个去向各自量一遍01工具一多,模型开始挑错工具选择准确率的拐点与延迟加载05长任务跑到后期开始重复和遗忘腐烂的实测形态,先确认不是幻觉02token 省下来了,账单反而涨了缓存命中率被压缩和裁剪打掉了06窗口快满了,要立刻止血压缩与裁剪的配置项和触发阈值03想知道改完到底有没有用五个指标与常见反模式07砍无可砍,但任务还没跑完把内容挪到窗口外面去04从零开始做这一层按顺序读,落地步骤在 07 篇第五节全读
右上那一格(工具定义膨胀)是投入产出比最高的一处:它是纯静态开销,每一轮都付,而且往往在任何人量之前就已经占掉几万 token。

只读两篇的话:05 篇(工具与检索结果)和 06 篇(前缀缓存)。前者是省得最多的一处,后者决定你省下来的 token 会不会被缓存失效吃回去。

三、三个需要先知道的前提

3.1 "上下文腐烂"有实测支撑,不是修辞

Chroma 2025 年 7 月的技术报告在 18 个模型(含 GPT-4.1、Claude 4、Gemini 2.5、Qwen3 系列)上做了控制变量实验,结论是模型并不均匀地使用上下文:同一个任务,只把输入拉长,表现就会下降。

更早的《Lost in the Middle》(arXiv 2307.03172)给出了位置维度的版本:相关信息放在开头或结尾时表现最好,放在中间显著变差 —— 即使是专门做长上下文的模型也一样。

细节和三个反直觉结论在 02 篇

3.2 压缩、裁剪、卸载是三件事,经常被当成一件

手段做什么内容还在不在API 层的对应物
压缩把旧内容总结成一段摘要语义在,原文没了compact_20260112,beta compact-2026-01-12
裁剪直接删掉特定块(老工具结果、思考块)不在了clear_tool_uses_20250919 / clear_thinking_20251015,beta context-management-2025-06-27
卸载挪到窗口外,用时再取一小部分完整在外部记忆工具、子 Agent、你自己的文件系统

三者不是替代关系,代价也完全不同 —— 压缩要多花一次模型调用,裁剪不花钱但会破缓存,卸载不花钱但要多花模型轮次。03 篇04 篇分别展开。

3.3 每一次上下文改动都是一次缓存事件

这是这一层最容易被忽略、也最直接影响账单的一条。缓存读取的价格约是常规输入的十分之一,缓存写入约是 1.25 倍 —— 把一段本来能命中缓存的前缀改掉,省下的 token 常常不如多付的缓存写入贵

官方文档在裁剪那一节专门给了一个参数来应对:clear_at_least 指定"至少要清掉这么多 token 才值得执行这次清理"。这个参数的存在本身就说明了问题的量级。06 篇是这条前提的展开。

四、本专题拆解的对象

数据核对于 2026-08-25,API 参数与默认值以官方文档为准。

4.1 三类 API 能力

能力标识Beta 头关键默认值
服务端压缩compact_20260112compact-2026-01-12触发阈值 150,000 输入 token,最低可设 50,000
工具结果裁剪clear_tool_uses_20250919context-management-2025-06-27触发 100,000 输入 token,保留最近 3 次工具调用
思考块裁剪clear_thinking_20251015同上默认行为按模型档次不同,跨档运行时必须显式设 keep
工具搜索(正则)tool_search_tool_regex_20251119每次搜索默认返回 5 个工具,最多 10,000 个延迟加载工具
工具搜索(BM25)tool_search_tool_bm25_20251119同上

逐条拆在 0305 篇。注意压缩与裁剪是两套独立的 beta,混用一个 beta 头会被拒。

4.2 两份实证材料

材料时间在本专题里的角色
Chroma《Context Rot》技术报告2025-0702 篇的主要依据。18 个模型、多组控制变量实验
Lost in the Middle(arXiv 2307.03172)2023-07(2023-11 修订)位置效应的出处,06 篇排布建议的依据之一

4.3 一套官方方法论

Anthropic 的《Effective context engineering for AI agents》给出了这一层的框架:把上下文当成有限资源来策划,长周期任务用压缩、结构化笔记、子 Agent 三种手段。本专题 03 到 04 篇沿用这个划分,但把每种手段的代价补齐 —— 原文更多讲怎么用,较少讲什么时候不该用。

五、与其他专题的关系

  • Agent 记忆:记忆负责"跨会话存什么",本专题负责"这一轮往窗口里放什么"。记忆读回来之后的注入位置与预算分配,是本专题 06 篇的内容
  • Agent 编排范式:子 Agent 隔离上下文(04 篇)同时也是一种编排选择,那个专题讲它的调度语义,本篇讲它的上下文账
  • Multi-Agent 产品源码分析:那个专题拆的几个产品里,上下文管理策略是最主要的差异点之一
  • Agent 可观测性:07 篇要打的那几个点,落在那个专题定义的 span 属性上

同板块的其他专题:Agent 框架横向对比 | Agent 编排范式 | Multi-Agent 产品源码分析